package com.misyi.designpattern.singleton;

/**
 * 基于内部类线程安全的饱汉模式
 *
 * 最最安全, 最保险的单例模式, 也是最常使用的
 *
 * @author licong
 * @date 2021-09-11 下午10:14
 */
public class InnerClassFullSingletonPatternDemo {

    public static void main(String[] args) {
        Singleton instance = Singleton.getInstance();
        instance.execute();
    }


    // 一定是线程安全的饱汉模式
    public static class Singleton {

        private Singleton() {

        }

        public static Singleton getInstance() {
            return InnerHolder.INSTANCE;
        }

        // 内部类只要没有被使用, 就不会初始化 INSTANCE
        // 第一次有人调用 Singleton.getInstance(), 内部类会创建一个 Singleton 的实例
        // Java 确保了静态类在初始化时, 一定只会初始化一次.
        private static class InnerHolder {

            private static final Singleton INSTANCE = new Singleton();

        }

        public void execute() {
            System.out.println("单例类的具体执行方法!");
        }
    }

}
